#ifndef __STACK_HPP_
#define __STACK_HPP_

#include "DoubleLinkList.hpp"

template<typename T>
class Stack
{
public:
    Stack();
    ~Stack();
    void Push(const T & value);
    void Pop();
    T & GetTop();
    bool IsEmpty();

private:
    DoubleLinkList<T> list;

};




template <typename T>
inline Stack<T>::Stack()
{
}

template <typename T>
inline Stack<T>::~Stack()
{
}

template <typename T>
inline void Stack<T>::Push(const T &value)
{
    list.InsertTail(value);//栈用头插
}

template <typename T>
inline void Stack<T>::Pop()
{
    return list.RemoveHead();
}

template <typename T>
inline T &Stack<T>::GetTop()
{
    return list.GetHead();
}

template <typename T>
inline bool Stack<T>::IsEmpty()
{
    return list.Size() == 0;
}

#endif